package com.smartcar.auth.feign;

import com.alibaba.fastjson.JSONObject;
import com.smartcar.common.domain.User;
import com.smartcar.common.domain.request.FindUserVo;
import com.smartcar.common.domain.request.UpdateLoginVo;
import com.smartcar.common.result.Result;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Log4j2
@Component
public class AdminFeignServiceTemLate {

    public static final Integer SUCCESS_CODE = 200;

    @Autowired
    private AdminFeign adminFeign;

    /**
     * 根据用户名查找用户信息
     */
    public User findUserByUserName(FindUserVo findUserVo) throws Exception {
        log.info("调用外部接口开始，方法名：根据用户名查找用户信息，入参是：{}", JSONObject.toJSONString(findUserVo));
        Result<User> result = adminFeign.findUserByusername(findUserVo);
        log.info("调用外部接口结束，方法名：根据用户名查找用户信息，出参是：{}", JSONObject.toJSONString(result));
        if (!SUCCESS_CODE.equals(result.getCode())) {
            log.info("调用外部接口失败，方法名：根据用户名查找用户信息，报错信息是：{}", result.getMsg());
        }
        return result.getData();
    }

    /**
     * 添加用户数据库
     */
    public int insertUser(User user) throws Exception {
        log.info("调用外部接口开始，方法名：添加用户数据库，入参是：{}", JSONObject.toJSONString(user));
        Result<Integer> result = adminFeign.insertUser(user);
        log.info("调用外部接口结束，方法名：添加用户数据库，出参是：{}", JSONObject.toJSONString(result));
        if (!SUCCESS_CODE.equals(result.getCode())) {
            log.info("调用外部接口失败，方法名：添加用户数据库，报错信息是：{}", result.getMsg());
        }
        return result.getData();
    }

    /**
     * 用户名唯一校验
     */
    public User verifyUniqueUserName(String username) throws Exception {
        log.info("调用外部接口开始，方法名：用户名唯一校验，入参是：{}", JSONObject.toJSONString(username));
        Result<User> result = adminFeign.verifyUniqueUserName(username);
        log.info("调用外部接口结束，方法名：用户名唯一校验，出参是：{}", JSONObject.toJSONString(result));
        if (!SUCCESS_CODE.equals(result.getCode())) {
            log.info("调用外部接口失败，方法名：用户名唯一校验，报错信息是：{}", result.getMsg());
        }
        return result.getData();
    }

    /**
     * 修改
     * 最后一次修改时间
     * 最后一次登录时间
     * 最后一次登录设备
     */
    public int updateLoginAdmin(UpdateLoginVo updateLoginVo) throws Exception {
        log.info("调用外部接口开始，方法名：修改登录后参数，入参是：{}", JSONObject.toJSONString(updateLoginVo));
        Result<Integer> result = adminFeign.updateLoginAdmin(updateLoginVo);
        log.info("调用外部接口结束，方法名：修改登录后参数，出参是：{}", JSONObject.toJSONString(result));
        if (!SUCCESS_CODE.equals(result.getCode())) {
            log.info("调用外部接口失败，方法名：修改登录后参数，报错信息是：{}", result.getMsg());
        }
        return result.getData();
    }

    /**
     * 根据手机号查
     */
    public User findByPhone(String phone){
        log.info("调用外部接口开始，方法名：根据手机号查用户信息，入参是：{}", JSONObject.toJSONString(phone));
        Result<User> byPhone = adminFeign.findByPhone(phone);
        log.info("调用外部接口结束，方法名：根据手机号查用户信息，出参是：{}", JSONObject.toJSONString(byPhone));
        if (!SUCCESS_CODE.equals(byPhone.getCode())) {
            log.info("调用外部接口失败，方法名：根据手机号查用户信息，报错信息是：{}", byPhone.getMsg());
        }
        return byPhone.getData();
    }

}
